/*
 * semaphore.h
 *
 *  Created on: 10/11/2011
 *      Author: joagf
 */

#ifndef SEMAPHORE_H_
#define SEMAPHORE_H_

/*Uma versão simplificada de semaforos para o trabalho  *
 *                      João Gonçalves Filho            *
 *******************************************************/


#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <pthread.h>

typedef struct{
        int num;                        /*numero atual do semaforo*/
        pthread_mutex_t mutex;          /*mutex do semaforo*/
        pthread_mutex_t mutex_num;      /*mutex da variavel num*/
}Semaphore;


/*Inicializa semaphoro com valor n, caso n seja 0 primeiro down() ja bloqueia o processo que o chamou*/
void init_semaphore(Semaphore *s,int n);

/* derruba o valor de n do caso num seja <=1 deve chamar o bloqueio do mutex*/
void down(Semaphore *s);


/*aumenta o valor de n e libera o mutex*/
void up(Semaphore *s);

/*libera os mutex do semaforo*/
void destroy(Semaphore *s);

#endif /* SEMAPHORE_H_ */
